package com.gofaraway.service.左神算法课;

/**
 * 随机函数的妙用
 *
 * @author ChenPeng
 * @Date 2024/12/22 18:37
 */
public class Code04_Random {

    /**
     * 练习1 ： 给你提供一个 随机返回 1 -5 之间的数的a函数 需要你根据这个 a函数(只能利用a函数 ) 设计一个b函数，这个b函数需要随机返回 1 - 7之间的数 思路：利用 a 得到一个 0 1 发生器 ， 然后
     * 利用位运算实现 b 函数的功能
     */


    public static int a() {
        //test push code
        return (int) (Math.random() * 5) + 1;
    }

    /**
     * 0 1 发生器
     *
     * @return
     */
    public static int f1() {
        int ans = 0;
        do {
            ans = a();
        } while (ans == 3);
        return ans < 3 ? 1 : 0;
    }


    /**
     * 0-7 随机出现一个
     *
     * @return
     */
    public static int b2() {
        return (f1() << 2) + (f1() << 1) + (f1() << 0);
    }

    public static int b() {
        int ans = 0;
        do {
            ans = b2();
        } while (ans == 0);
        return ans;
    }

    public static void main(String[] args) {

        for (int i = 0; i < 100; i++) {
            int ans = b2();
            System.out.print(ans + " ");
            if (ans > 7) {
                System.out.println("出错了");
            }
        }
        System.out.println();
        System.out.println("================");

        int testTime = 100000;
        int[] countArr = new int[8];

        for (int i = 0; i < testTime; i++) {
            countArr[b()]++;
        }
        for (int i = 0; i < countArr.length; i++) {
            System.out.println(i + "出现了" + countArr[i] + "次");
        }
    }


}